#include<bits/stdc++.h>
using namespace std;
typedef long long LL;
const int N=100005;

int n,m;
LL arr[N];
LL ans;

struct Node{
    int l,r;
    LL lazya,lazyd,sum;
    Node* left;
    Node* right;
    Node(int l_,int r_){
        l=l_;r=r_;
        left=right=nullptr;
        sum=lazya=lazyd=0;
    }
};

Node* build(int l,int r){
    Node* root=new Node{l,r};
    if(l==r){
        root->sum=arr[l];
        return root;
    }
    int mid=(r-l)/2+l;
    root->left=build(l,mid);
    root->right=build(mid+1,r);
    root->sum=root->left->sum+root->right->sum;
    return root;
}

void push_down(Node* root){
    if(root->lazya!=0||root->lazyd!=0){
    	int l=root->l,r=root->r;
    	int mid=(r-l)/2+l;
        int n=mid-l+1;
        root->left->sum+=n*root->lazya+(n-1)*n*root->lazyd/2;
        int n2=r-l+1;
        root->right->sum+=n2*root->lazya+n2*(n2-1)*root->lazyd/2
						  -(n*root->lazya+(n-1)*n*root->lazyd/2);
        //
        root->left->lazyd+=root->lazyd;
        root->right->lazyd+=root->lazyd;
        root->left->lazya+=root->lazya;
        root->right->lazya+=root->lazya;
        root->lazya=root->lazyd=0;
    }
    return;
}

void add(const int x,const int y,Node* root,const LL a,const LL d){
    int l=root->l,r=root->r;
	if(!root||x>root->r||y<root->l) return;
    if(l>=x&&r<=y){
        root->sum+=(r-l+1)*(a+d*(l-x)+a+d*(r-x))/2; 
        root->lazya+=a;
        root->lazyd+=d;
        return;
    }
    push_down(root);
    int mid=(r-l)/2+l;
    if(mid>=x) add(x,y,root->left,a,d);
    if(y>mid) add(x,y,root->right,a,d);
    root->sum=root->left->sum+root->right->sum;
    return;
}

void query(const int x,const int y,Node* root){
    if(!root||x>root->r||y<root->l) return;
    if(root->l>=x&&root->r<=y){
        ans+=root->sum;
        return;
    }
    push_down(root);
    int mid=(root->r-root->l)/2+root->l;
    if(mid>=x) query(x,y,root->left);
    if(mid<y) query(x,y,root->right);
}

int main(){
    scanf("%d%d",&n,&m);
    for(int i=1;i<=n;i++){
        scanf("%lld",&arr[i]);
    }
    Node* root=build(1,n);
    int op;
    int x,y;
    LL a,d;
    for(int i=1;i<=m;i++){
        scanf("%d",&op);
        if(op==1){
            scanf("%d%d%lld%lld",&x,&y,&a,&d);
            add(x,y,root,a,d);
        }
        else{
            ans=0;
            scanf("%d",&x);
            query(x,x,root);
            printf("%lld\n",ans);
        }
    }
    return 0;
}
